<?php
declare (strict_types = 1);

namespace app\adminapi\controller;

use app\adminapi\facade\Student;

use think\Exception;
use think\exception\ValidateException;
use think\facade\Db;

use think\facade\Request;
use think\facade\Middleware;

use app\adminapi\extend\tools\jwt\Token;
use app\common\model\Admin;
use think\facade\Log;

use thans\jwt\facade\JWTAuth;

class Login
{


    /**
     * 登录接口
     * @param Admin $adminModel * 管理表模型
     * @return \think\response\Json|void  # 返回数据类型为json
     */
    public function login(Admin $adminModel){
        //进行验证码校验 使用手动验证方法
//        if (!captcha_check($param['code'])) {
//            return fail('2001','验证码错误');
//        }
        //根据用户名和密码（加密后的密码），查询管理员用户表
        //获取输入变量
        $param = input();
        try {
            # 验证接口参数
            validate(\app\adminapi\validate\Login::class)->check($param);
            $admin  = $adminModel::where('username','=',$param['username'])->find();
            if ($admin) {
                if ($admin->password == passwordEncrypt($param['password'])) {

                     # 品优购项目 三张表
                    # 根据用户id查询对应的权限  # 查询一个管理员拥有的权限：先查询管理员表，获取到角色id
                     $role_id = $admin->role_id;
                     # 特殊情况：超级管理员 拥有所有的权限。
                     # 设置 超级管理员的角色id为1，超级管理员拥有的权限，不用权限检测
                     if ($role_id != 1) {
                         #  普通用户、再查询角色表，获取到拥有的权限ids
                         $role = \app\common\model\Role::find($role_id)->toArray();
                         # 最后根据权限ids查询权限表，where id in（1,2,3）
                         $auth = \app\common\model\Auth::whereIn('id',$role['role_auth_ids'])->select()->toArray();
                         $authList = [];
                        foreach ($auth as $value) {
                            if ($value['auth_a'] && $value['auth_c']) {
                                $authList[] = $value['auth_c'].'/'.$value['auth_a'];
                            }
                        }
                        cache('auth_list',$authList);
                     }
                    Log::info($admin->username.'登录成功'.date('Y-m-d H:i:s'));
                    return  success([
                        'token' => Token::getToken($admin->id)
                    ]);
                } else {
                    return fail(2001,'密码错误');
                }
            } else {
                abort(2001,'用户名不存在');
            }
        }catch (ValidateException $exception) {
            return fail(2001,$exception->getError());
        }catch (Exception $exception) {
            return fail(2001,$exception->getError());
        }


    }

    /**
     * 获取验证码接口
     * @return \think\response\Json
     */
    public function getCaptcha(){
        //返回数据 验证码图片路径、验证码标识
        $data = [
//            'src' => 'http://adminapi.pyg.com'.captcha_src(),
            'src' => 'http://liu.windsir.cn/'.captcha_src(),
        ];
        return json($data);
    }

    /**
     * 退出接口
     * @return \think\response\Json|void
     * @throws \Exception
     */
    public function logout(){
        # 创建token  缓存
        # 退出 删除token 缓存
        $token = Token::getRequestToken();
        $delete_token = cache('delete_token') ?: [];
        $delete_token[] = $token;
        cache('delete_token', $delete_token, 86400);
        return success();
    }


    public function findRole(Admin $adminModel){
        // 通过关联模型、查询当前登录用户的角色
//        $adminInfo = $adminModel::find(6);

        echo Student::getAge();
    }

}
